package com.aaa.sys.controller;

import com.aaa.sys.entity.User;
import com.aaa.sys.service.CommonFileHandlerService;
import com.aaa.sys.service.RoleService;
import com.aaa.sys.service.UserService;
import com.aaa.sys.util.JwtUtils;
import com.auth0.jwt.interfaces.Claim;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

import com.aaa.common.util.BaseController;
import com.aaa.common.util.Result;
import com.aaa.common.vo.Page;
import org.springframework.web.multipart.MultipartFile;

import java.util.Map;


/**
 * 用户信息表(User)表控制层
 *
 * @author makejava
 * @since 2023-06-16 14:30:57
 */
@RestController
@RequestMapping("userS")
public class UserController extends BaseController {
    /**
     * 服务对象
     */
    @Resource
    private UserService userService;

    @Resource
    private RoleService roleService;

    @Resource
    private CommonFileHandlerService commonFileHandlerService;

    /**
     * 文件上传操作
     *        必须使用@RequestParam绑定上传对象，否则文件上传不了  里面的名称必须和前端对应
     * @param file  MultipartFile  该类是springmvc封装的获取上传文件的对象
     * @return
     */
    @PostMapping("uploadFile")
    public Result uploadFile(@RequestParam("file") MultipartFile file){
        //调用封装的服务接口 进行文件上传
        System.out.println("file--------------------"+file);
        return success(commonFileHandlerService.uploadFile(file,"Project/user"));
    }

    @GetMapping("queryUserInfoByUserId")
    public Result queryUserInfoByUserId(String token){
        String tokenSub = token.substring(token.indexOf("-") + 1);
        Map<String, Claim> payloadByToken = JwtUtils.getPayloadByToken(tokenSub);
        Claim userId1 = payloadByToken.get("userId");
        System.out.println(userId1+".................");
        //userId="1"
        String userId = userId1.toString().replace("\"", "");
        return success(userService.queryById(Integer.valueOf(userId)));
    }

    /**
     * 更新删除用户信息
     * @param userId
     * @return
     */
    @GetMapping("updateDelFlag")
    public Result updateDelFlag(Integer userId){
        return success(userService.updateDelFlag(userId));
    }

    /**
     * 批量添加用户角色
     * @param userId
     * @param roleIdString
     * @return
     */
    @GetMapping("batchInsertUserRole")
    public Result batchInsertUserRole(Integer userId,String roleIdString){
        return success(userService.batchInsertUserRole(userId,roleIdString));
    }

    /**
     * 根据用户id查询角色id
     * @param userId
     * @return
     */
    @GetMapping("queryRoleIdsByUserId")
    public Result queryRoleIdsByUserId(Integer userId){
        return success(roleService.queryRoleIdsByUserId(userId));
    }


    /**
     * 根据用户名查询用户信息
     * @param userName
     * @return
     */
    @GetMapping("queryByUserName")
    //openfeign单个属性传参用 @RequestParam   多个属性传参用 @RequestBody
    public User queryByUserName(@RequestParam("userName") String userName) {
        return userService.queryByUserName(userName);
    }

    /**
     * 分页查询
     *
     * @param page 分页查询封装
     * @return 查询结果
     */
    @PostMapping("queryByPage")
    public Result queryByPage(@RequestBody Page<User> page) {
        return success(this.userService.queryByPage(page));
    }

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @GetMapping("queryById")
    public Result queryById(Integer id) {
        return success(this.userService.queryById(id));
    }

    /**
     * 新增数据
     *
     * @param user 实体
     * @return 新增结果
     */
    @PostMapping("add")
    public Result add(@RequestBody User user) {
        return success(this.userService.insert(user));
    }

    /**
     * 编辑数据
     *
     * @param user 实体
     * @return 编辑结果
     */
    @PostMapping("edit")
    public Result edit(@RequestBody User user) {
        System.out.println("user--------------"+user);
        return success(this.userService.update(user));
    }

    /**
     * 删除数据
     *
     * @param id 主键
     * @return 删除是否成功
     */
    @DeleteMapping("deleteById")
    public Result deleteById(Integer id) {
        return success(this.userService.deleteById(id));
    }

}

